Skip to content

chore: merge upstream immich-app/immich (2026-03-13)#91

Merged
Deeds67 merged 61 commits intomainfrom
merge/upstream-2026-03-13
Mar 13, 2026
Merged

chore: merge upstream immich-app/immich (2026-03-13)#91
Deeds67 merged 61 commits intomainfrom
merge/upstream-2026-03-13

Conversation

@Deeds67
Copy link
Collaborator

@Deeds67 Deeds67 commented Mar 13, 2026

Summary

Merges 60 upstream commits from immich-app/immich into our fork (includes the 55 from PR #80 which were merged but left the branch "behind" due to merge commit topology, plus 5 new commits).

New upstream changes (since PR #80)

Conflicts resolved (17 files)

  • Same patterns as PR chore: merge upstream immich-app/immich (2026-03-12) #80 — rerere auto-resolved 4, remaining resolved manually
  • New: 2 mobile Kotlin files (HttpClientManager, RemoteImagesImpl) — took upstream's video auth/Cronet refactor
  • All server spec files: factory imports, as any casts for Kysely types
  • Fork features preserved: S3 storage, shared spaces, pet detection, image editing, branding

Verification

  • Server TypeScript: 0 errors
  • ESLint: 0 warnings
  • Prettier: clean

Test plan

  • CI passes all checks

🤖 Generated with Claude Code

uhthomas and others added 30 commits March 5, 2026 17:45
The background of the photo view does not extend below the height of the
viewport, and so the asset details fade in over black with the photo
view, and the standard surface colour scheme of the scaffold for the
rest. This leads to a janky animation. We can't change the background of
the scaffold to black, as it in turn makes the iOS bouncing scroll
physics cut off incorrectly. The best fix is to remove background
decoration from the photo view, and defer to the parent to colour the
background.

Co-authored-by: Alex <alex.tran1502@gmail.com>
* feat(mobile): SyncAssetEditV1

* fix: websocket handling

* fix: server version requirement

* fix: revert pubspec changes
Search results use a different provider than the main timeline, and they
appear appear to have diverged a bit. This means that assets can
sometimes look wrong or different in search compared to the main
timeline or albums.
…cing glide exposure (immich-app#26747)

* feat(android): enhance playback style detection using MIME type

* feat(android): improve playback style detection for GIF and WebP formats

* fix(android): make playback style detection faster

* refactor(android): simplify XMP reading logic for API 29 and below

* update playback style detection documentation

* use DefaultImageHeaderParser instead of all available ones for webp playbackStyle type detection
* fix(mobile): correct local asset dimensions

We are constraining the size of videos so that they play nicely with
hero animations, and don't stretch in weird ways. This however caused a
regression as we are not account for local assets on Android which have
un-oriented dimensions.

* post-orientation width and height in local sync

* migration

* no need to handle it in asset viewer

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
immich-app#26736)

* Fix opus handling as accepted audio codec in transcode policy

Fix the issue when opus is among accepted audio codecs in transcode policy
(which is default) but it still triggers transcoding because the codec name
from ffprobe (opus) does not match `libopus` literal in Immich.

Make a distinction between a codec name and encoder:
- codec name: switch to `opus` as the audio codec name. This matches what ffprobe
returns for a media file with opus audio.
- encoder: continue using the `libopus` encoder in ffmpeg.

* Add unit tests for accepted audio codecs and for libopus encoder

* Add db migration for ffmpeg.targetAudioCodec opus

* backward compatibility

* tweak

* noisy logs

* full mapping

* make check happy

* mark deprecated

* update api

* indexOf

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
* Enable OpenVINO CPU acceleration in Immich

* Remove unnecessary debug log

* Removing checking for device_ids for openvino since cpu will always be available

* Find OpenVINOExecutionProvider index instead of assuming index 0

* Fix openvino tests

* Fix failing test mock. OpenVINO expects provider options, but cuda provide doesn't so use that for mocked tests.

* Support empty provider options in OrtSessions in which case ONNXRuntime will use its own defaults

* Use OpenVINOExecutionProvider for test_sets_provider_options_kwarg

* fix mock

* simplify

* unused variable

---------

Co-authored-by: Aleksander <pejcic@adobe.com>
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
…x selectDay selector scoping (immich-app#26776)

fix(e2e): optimize resetDatabase with TRUNCATE and fix selectDay selector scoping
…mich-app#26726)

* fix(migration): restrict trashed asset migration to Android platform

* playbackStyle migration add different log depending on platform
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
It's not being used right now; can always add it back :P
Videos have recently been changed to support zooming, but this can make
the controls in the centre of the screen unergonomic as they will either
stay in the centre when dismissing, or stick to the video when zooming.
Neither is great. We should align the behaviour with other apps which
has the play/pause toggle at the bottom of the screen with the seeker
bar instead.

Co-authored-by: Alex <alex.tran1502@gmail.com>
immich-app#26807)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
The numbers in the backup page are not monospace, and so changes cause
the layout to shift. Using tabular figures (monospace) will prevent
that.

Refs: immich-app#25021
* feat(mobile): use material design 3 slider

The new slider is easier to use, and looks more modern.

* chore: add shadow to button and text for better visibility

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
bo0tzz and others added 26 commits March 11, 2026 11:15
* Add support for showing animated images in AssetViewer with AnimatedImageStreamCompleter

* Add GIF overlay to thumbnail tile for animated assets

* formatting

* require isAnimated parameter in image providers for better asset handling

* feat: refactor AnimatedImageStreamCompleter to use streams for codec loading and initial image handling

* formatting

* add isAnimatedImage property to BaseAsset

* remove ApiService.getRequestHeaders() usage
* use cookiejar

* cookie duping hook

* remove old pref

* handle network switching on logout

* remove bootstrapCookies

* dead code

* fix cast

* use constants

* use new event name

* update api
Co-authored-by: Your Name <brendan.ngo@okendo.io>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
…app#26813)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…h-app#26851)

We recently changed the asset viewer to use a gradient. The circle
button looks out of place now.
fix(web): fix zoom touch event handling and add clarifying comments

- Suppress Safari's synthetic dblclick on double-tap which conflicts with zoom-image's touchstart-based zoom
- Add comment explaining pointer-events-none on zoom transform wrapper
- Add comments for touchAction and overflow style overrides
…mmich-app#26868)

* fix(server): restrict individual shared link asset removal to owners

* make open-api
* refactor: move encoded video to asset files table

* chore: update
…-app#26831)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix video auth

* update commit
Final step on immich-app#22833

PReq immich-app#22833 is about adding support for SMTP-over-TLS rather than just STARTTLS when sending emails. That PReq adds almost everything; it just forgot to actually pass the flag to Nodemailer at the end.

This adds that last line of code and makes it work correctly (for me, anyways!).

Co-authored-by: Nathaniel <I@nathaniel.land>
* feat: require pull requests to follow template

* fix: persist-credentials: false
…erge

# Conflicts:
#	.github/workflows/docker.yml
#	mobile/android/app/src/main/kotlin/app/alextran/immich/core/HttpClientManager.kt
#	mobile/android/app/src/main/kotlin/app/alextran/immich/images/RemoteImagesImpl.kt
#	pnpm-lock.yaml
#	server/src/dtos/person.dto.ts
#	server/src/services/asset-media.service.spec.ts
#	server/src/services/auth.service.spec.ts
#	server/src/services/cli.service.spec.ts
#	server/src/services/media.service.ts
#	server/src/services/metadata.service.ts
#	server/src/services/person.service.spec.ts
#	server/src/services/search.service.spec.ts
#	server/src/services/session.service.spec.ts
#	server/src/services/shared-link.service.spec.ts
#	server/src/services/sync.service.spec.ts
#	server/src/services/user.service.spec.ts
#	server/test/small.factory.ts
#	web/src/lib/components/admin-settings/StorageTemplateSettings.svelte
#	web/src/lib/components/assets/thumbnail/video-thumbnail.svelte
#	web/src/lib/components/share-page/individual-shared-viewer.svelte
#	web/src/lib/services/asset.service.ts
@Deeds67 Deeds67 added the changelog:skip Skip changelog entry label Mar 13, 2026
@Deeds67 Deeds67 merged commit 76cb627 into main Mar 13, 2026
34 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.